package simco.framework.gui.services;

import java.util.ArrayList;
import java.util.List;

import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

/**
 * Trida umoznuje generovat udalosti typu changeEvent a
 * podporuje registrovani posluchacu.  
 * 
 * @author Matej Prokop, mythge@students.zcu.cz
 *
 */
public class ChangeEventSupporter
{
	/**
	 * Seznam registrovanych posluchacu
	 */
	private List<ChangeListener> listeners;
	
	/**
	 * Vytvori novy objekt schopny produckovat udalost
	 * typu changeEvent
	 */
	public ChangeEventSupporter()
	{
		this.listeners = new ArrayList<ChangeListener>();
	}
	
	/**
	 * Prida noveho posluchace
	 * @param l reference naposluchace
	 */
	public void addChangeListener(ChangeListener l) 
	{
		this.listeners.add(l);
	}

	/**
	 * Vygeneruje udelost typu changeEvent
	 */
	protected void fireStateChanged() 
	{	
		for(ChangeListener l : listeners)
		{
			l.stateChanged( new ChangeEvent(this) );
		}
	}

	/**
	 * Vrati list registrovanych posluchacu
	 * @return list registrovanych posluchacu
	 */
	public List<ChangeListener> getChangeListeners() 
	{
		return this.listeners;
	}

	/**
	 * Odstrani posluchace ze seznamu registrovanych posluchacu
	 * @param l reference na odstranovaneho posluchace
	 */
	public void removeChangeListener(ChangeListener l) 
	{
		this.listeners.remove(l);
	}
}
